//-----------------------------------------------------------------
// 功能描述: 
//     测试STM32与FPGA模块SPI通信程序
// 作    者: 电子创新
// 开始日期: 2014-02-15
// 完成日期: 2014-02-15
// 修改日期: 2024-01-20
// 版    本: V1.2
//   - V1.1: 向FPGA发送数据，STM32接收并显示
//   - V1.2: 将显示设备从TFT改为LCD1602
// 测试工具: 电子创新STM32+FPGA开发系统、配套开发板、LZE_ST LINK2、LCD1602
// 说    明:
//    - 程序使用的系统时钟频率Fsysclk=72MHz。
//-----------------------------------------------------------------

//-----------------------------------------------------------------
// 头文件包含
//-----------------------------------------------------------------
#include <stm32f10x.h>
#include <stdio.h>
#include "PeripheralInit.h"
#include "Delay.h"
#include "SPI.h"
#include "CharLCD.h"

//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
int main(void)
{
    uint32_t rece_date;
    u8 freq_buf[4];
    u8 amp_buf[5];  // 增加缓冲区大小以容纳4位数字
    u8 freq_val;
    u8 amp_val;
    const u16 amp_values[4] = {1200, 600, 300, 150}; // 幅度值（单位：mV）
    
    PeripheralInit();                // 外设初始化
    LCM_Init();                      // LCD1602初始化
    WrCLcdC(0x01);                   // 清屏
    
    // 初始化统计数据显示
    WriteString(1, 1, "FRE:");
    WriteString(2, 1, "AMP:");

    while(1) 
    {
        SPI2_Send_Cmd_Data(128, 0);    // 选择128模块
        Delay_1ms(300);
        rece_date = SPI2_Rece_Cmd_Data(0);  // 读取32位数据

        // 解析数据 --------------------------------------------
        freq_val = rece_date / 10;  // 频率值 (0-9)
        amp_val  = rece_date % 10;  // 幅度值 (0-3)
        
        // 确保amp_val在有效范围内
        if(amp_val > 3) amp_val = 3;

        // 显示频率值到第一行 -------------------------------
        sprintf((char *)freq_buf, "%-3d", freq_val * 100+100);  // 转换为实际频率 (Hz)
        WriteString(1, 5, freq_buf);  // 在"FRE:"后显示（第5列）

        // 显示幅度值到第二行 -------------------------------
        sprintf((char *)amp_buf, "%4d", amp_values[amp_val]);  // 显示幅度值（mV）
        WriteString(2, 5, amp_buf);   // 在"AMP:"后显示（第5列）
    }
}

//-----------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------